using System;
using System.Collections.Generic;
using System.IO;
using System.Windows.Forms;

public class FileAndFolderSelectionResult
{
    // 选中的文件列表
    public List<string> Files { get; } = new List<string>();
    
    // 选中的目录列表
    public List<string> Folders { get; } = new List<string>();
}

public class FileAndFolderSelector
{
    /// <summary>
    /// 显示可同时选择文件和目录的对话框
    /// </summary>
    /// <returns>包含选中文件和目录的结果对象</returns>
    public static FileAndFolderSelectionResult ShowDialog1()
    {
        var result = new FileAndFolderSelectionResult();
        
        // 1. 选择文件
        using (var fileDialog = new OpenFileDialog())
        {
            fileDialog.Title = "选择文件（可多选）";
            fileDialog.Multiselect = true; // 允许选择多个文件
            fileDialog.Filter = "所有文件 (*.*)|*.*";
            
            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                result.Files.AddRange(fileDialog.FileNames);
            }
            else
            {
                // 如果取消选择文件，也可以返回空结果
                return result;
            }
        }
        
        // 2. 选择目录（使用之前实现的多目录选择对话框）
        var selectedFolders = MultiFolderDialog.ShowDialog("请选择目录（可多选）");
        result.Folders.AddRange(selectedFolders);
        
        return result;
    }
    
    // 这里需要包含之前实现的MultiFolderDialog类
    // （为简洁起见，此处省略，实际使用时需要包含完整实现）
}

// 使用示例
public class DemoForm : Form
{
    private void btnSelect_Click(object sender, EventArgs e)
    {
        var selection = FileAndFolderSelector.ShowDialog1();
        
        // 显示选择结果
        MessageBox.Show(
            $"已选择 {selection.Files.Count} 个文件和 {selection.Folders.Count} 个目录",
            "选择结果"
        );
        
        // 处理文件
        foreach (var file in selection.Files)
        {
            Console.WriteLine("文件: " + file);
        }
        
        // 处理目录
        foreach (var folder in selection.Folders)
        {
            Console.WriteLine("目录: " + folder);
        }
    }
}
